package com.example.stuwork.service.impl;

import com.example.stuwork.common.Result;
import com.example.stuwork.dao.ClassCourseDao;
import com.example.stuwork.dao.ClassDao;
import com.example.stuwork.dao.CourseDao;
import com.example.stuwork.dao.StudentDao;
import com.example.stuwork.pojo.ClassCourse;
import com.example.stuwork.pojo.Course;
import com.example.stuwork.service.TeacherCourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

/**
 * 教师课程服务实现类
 */
@Service
public class TeacherCourseServiceImpl implements TeacherCourseService {

    @Autowired
    private ClassCourseDao classCourseDao;

    @Autowired
    private CourseDao courseDao;

    @Autowired
    private ClassDao classDao;

    @Autowired
    private StudentDao studentDao;

    /**
     * 获取教师所教授的课程列表
     *
     * @param teacherId 教师ID
     * @return 课程列表
     */
    @Override
    public Result<List<Map<String, Object>>> getTeacherCourses(String teacherId) {
        try {
            // 获取教师教授的班级课程关联
            List<ClassCourse> classCourses = classCourseDao.findByTeacherId(teacherId);
            List<Map<String, Object>> result = new ArrayList<>();

            // 处理每个班级课程，组装前端需要的数据结构
            for (ClassCourse classCourse : classCourses) {
                // 获取课程信息
                Course course = courseDao.getById(classCourse.getCourseId());
                if (course == null) {
                    continue;
                }

                // 获取班级的学生数量
                int studentCount = studentDao.findStudentsByClassId(classCourse.getClassId()).size();

                // 待批改作业数量，暂时设为0，可以进一步实现
                int pendingHomework = 0;

                // 构建课程信息对象
                Map<String, Object> courseInfo = new HashMap<>();
                courseInfo.put("id", course.getCourseId());
                courseInfo.put("name", course.getCourseName());
                courseInfo.put("className", classCourse.getClassName());
                courseInfo.put("time", classCourse.getTerm());
                courseInfo.put("studentCount", studentCount);
                courseInfo.put("pendingHomework", pendingHomework);
                courseInfo.put("classId", classCourse.getClassId());
                
                // 随机选择图片 (实际项目中应该存储在数据库或配置中)
                int randomImageNum = new Random().nextInt(4) + 1;
                courseInfo.put("image", randomImageNum + ".jpg");
                
                result.add(courseInfo);
            }

            return Result.success(result);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取教师课程列表失败：" + e.getMessage());
        }
    }

    /**
     * 获取课程详情
     *
     * @param courseId 课程ID
     * @param classId 班级ID
     * @return 课程详情
     */
    @Override
    public Result<Map<String, Object>> getCourseDetail(String courseId, Long classId) {
        try {
            // 获取课程基本信息
            Course course = courseDao.getById(courseId);
            if (course == null) {
                return Result.error("课程不存在");
            }

            // 获取班级课程关联信息
            List<ClassCourse> classCourses = classCourseDao.findByCourseId(courseId);
            ClassCourse classCourse = null;
            for (ClassCourse cc : classCourses) {
                if (cc.getClassId().equals(classId)) {
                    classCourse = cc;
                    break;
                }
            }

            if (classCourse == null) {
                return Result.error("班级课程关联不存在");
            }

            // 获取学生数量
            int studentCount = studentDao.findStudentsByClassId(classId).size();

            // 构建返回数据
            Map<String, Object> result = new HashMap<>();
            result.put("id", course.getCourseId());
            result.put("name", course.getCourseName());
            result.put("className", classCourse.getClassName());
            result.put("time", classCourse.getTerm());
            result.put("description", course.getDescription());
            result.put("studentCount", studentCount);
            result.put("homeworkCount", 0); // 暂时设为0，可以进一步实现
            result.put("pendingHomework", 0); // 暂时设为0，可以进一步实现
            result.put("schedule", "待完善"); // 需要从数据库获取
            result.put("location", "待完善"); // 需要从数据库获取

            return Result.success(result);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取课程详情失败：" + e.getMessage());
        }
    }

    /**
     * 创建课程
     *
     * @param courseData 课程数据
     * @return 创建结果
     */
    @Override
    @Transactional
    public Result<?> createCourse(Map<String, Object> courseData) {
        try {
            // 这里实现课程创建逻辑，暂时简单返回成功
            return Result.success("课程创建成功");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("创建课程失败：" + e.getMessage());
        }
    }

    /**
     * 更新课程信息
     *
     * @param courseId   课程ID
     * @param courseData 课程数据
     * @return 更新结果
     */
    @Override
    @Transactional
    public Result<?> updateCourse(String courseId, Map<String, Object> courseData) {
        try {
            // 这里实现课程更新逻辑，暂时简单返回成功
            return Result.success("更新课程成功");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("更新课程失败：" + e.getMessage());
        }
    }

    /**
     * 删除课程
     *
     * @param courseId 课程ID
     * @param classId  班级ID
     * @return 删除结果
     */
    @Override
    @Transactional
    public Result<?> deleteCourse(String courseId, Long classId) {
        try {
            // 这里实现课程删除逻辑，暂时简单返回成功
            return Result.success("删除课程成功");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("删除课程失败：" + e.getMessage());
        }
    }
} 